
#ifdef a
//基类和派生类对象赋值转换:派生类对象/子类的对象可以赋值给基类的对象/基类的指针/基类的引用（切片/分割）
	//又称之为 ：赋值兼容规则
	//1.子类可以赋值给基类对象，反之则不行
	//2.基类对象引用可以指向子类，反之则不行
	//3.基类对象指针可以指向子类，反之则不行
//以上的前提条件：继承方式必须要为public

//public的继承方式：子类和基类实际是is_a的关系，即子类是父类，如狗是动物，而不能说动物是狗

#include<iostream>
using namespace std;
class Animal {
	void SetAnimal(const string& name, const string& gender, int age) {
		_name = name;
		_gender = gender;
		_age = age;
	}

//为了让该基类其子类类外得以访问，采用protected而不用private
//protected:
//测试强转使用public
public:
	string _name;
	string _gender;
	int _age;
};

class Dog : public Animal
{
//private:
public://测试强转
	string _color;

};//千万别忘了类后加' ; '

int main() {
	Animal a;
	Dog d;
	a = d;//子类赋值给基类
	//d = a-->错误

	Animal& ra = d;
	//Dog& rd = a;-->错误

	Animal* pa;
	Dog* pd;
	pa = &d;
	//pd = &a;-->错误


	//强转
//强转，使得子类指向基类，可以通过编译，但执行时容易发生越界错误	pd = (Dog*)&pa;//编译没问题
	pd->_name = "大黑";
	//pd->_color = "黑";
	//此时pd指针指向的内容只有_name,_gender,_age,对于_color来说，使用pd来访问是越界的
	return 0;
}
#endif



